/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.vdab.dao;

import be.vdab.entiteit.Klant;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author tom.vanpoucke
 */
public class KlantDAO extends AbstractDAO{
    private static final String FIND_KLANT =
            "select * from klanten where GebruikersNaam=? and Paswoord=?";
    private static final String CREATE_KLANT =
            "insert into klanten(voornaam, familienaam, straat, huisnr, postcode, gemeente, gebruikersnaam, paswoord) values(?,?,?,?,?,?,?,?)";
    private static final String EXIST_KLANT =
            "select exists (select * from klanten where gebruikersnaam=?)";
   
    public int existKlant(String gebruikersnaam){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try{
            int ok = 0;
            connection = getConnection();
            statement = connection.prepareStatement(EXIST_KLANT);
            statement.setString(1, gebruikersnaam);
            resultSet = statement.executeQuery();
            if(resultSet.next()){
               ok = resultSet.getInt(1);
            }
            return ok;
        }
        catch(SQLException ex){
            throw new DAOException("kan niet lezen uit database", ex);
        }
        finally{
            close(resultSet, statement, connection);
        }
    }
    public Klant findKlant(String gebruikersnaam, String paswoord){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try{
            Klant klant = null;
            connection = getConnection();
            statement = connection.prepareStatement(FIND_KLANT);
            statement.setString(1, gebruikersnaam);
            statement.setString(2, paswoord);
            resultSet = statement.executeQuery();
            if(resultSet.next()){
                klant = resultSetRijNaarKlant(resultSet);
            }
            
            return klant;
        }
        catch(SQLException ex){
            throw new DAOException("kan klant niet lezen uit database", ex);
        }
        finally{
            close(resultSet, statement, connection);
        }
    }
    public void createKlant(Klant klant){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try{
            connection = getConnection();
            statement = connection.prepareStatement(CREATE_KLANT);
            statement.setString(1, klant.getVoornaam());
            statement.setString(2, klant.getFamilienaam());
            statement.setString(3, klant.getStraat());
            statement.setString(4, klant.getHuisnr());
            statement.setString(5, klant.getPostcode());
            statement.setString(6, klant.getGemeente());
            statement.setString(7, klant.getGebruikersnaam());
            statement.setString(8, klant.getPaswoord());
            int update = statement.executeUpdate();
            if(update == 0){
                throw new DAOException("Klant toevoegen mislukt, geen insert gebeurd");
            }
        } catch(SQLException ex){
            throw new DAOException("Database error bij toevoegen nieuwe klant", ex);
        }finally{
            close(resultSet, statement, connection);
        }
    }
    
    private Klant resultSetRijNaarKlant(ResultSet resultSet) throws SQLException{
        return new Klant(resultSet.getInt("KlantNr"),
                resultSet.getString("Voornaam"),
                resultSet.getString("Familienaam"),
                resultSet.getString("Straat"),
                resultSet.getString("HuisNR"),
                resultSet.getString("Postcode"),
                resultSet.getString("Gemeente"),
                resultSet.getString("GebruikersNaam"),
                resultSet.getString("Paswoord"));
    }
}
